Expand description
QUIC transport protocol support for Tokio
QUIC is a modern transport protocol addressing shortcomings of TCP, such as head-of-line blocking, poor security, slow handshakes, and inefficient congestion control. This crate provides a portable userspace implementation. It builds on top of quinn-proto, which implements protocol logic independent of any particular runtime.
The entry point of this crate is the Endpoint
.
About QUIC
A QUIC connection is an association between two endpoints. The endpoint which initiates the connection is termed the client, and the endpoint which accepts it is termed the server. A single endpoint may function as both client and server for different connections, for example in a peer-to-peer application. To communicate application data, each endpoint may open streams up to a limit dictated by its peer. Typically, that limit is increased as old streams are finished.
Streams may be unidirectional or bidirectional, and are cheap to create and disposable. For example, a traditionally datagram-oriented application could use a new stream for every message it wants to send, no longer needing to worry about MTUs. Bidirectional streams behave much like a traditional TCP connection, and are useful for sending messages that have an immediate response, such as an HTTP request. Stream data is delivered reliably, and there is no ordering enforced between data on different streams.
By avoiding head-of-line blocking and providing unified congestion control across all streams of a connection, QUIC is able to provide higher throughput and lower latency than one or multiple TCP connections between the same two hosts, while providing more useful behavior than raw UDP sockets.
Quinn also exposes unreliable datagrams, which are a low-level primitive preferred when automatic fragmentation and retransmission of certain data is not desired.
QUIC uses encryption and identity verification built directly on TLS 1.3. Just as with a TLS server, it is useful for a QUIC server to be identified by a certificate signed by a trusted authority. If this is infeasible–for example, if servers are short-lived or not associated with a domain name–then as with TLS, self-signed certificates can be used to provide encryption alone.
Modules
Logic for controlling the rate at which data is sent
Traits and implementations for the QUIC cryptography protocol
Structs
Reason given by an application for closing the connection
A chunk of data from the receive stream
Configuration for outgoing connections
In-progress connection attempt future
A QUIC connection.
Reason given by the transport for closing the connection
Stream of unordered, unreliable datagrams sent by the peer
A QUIC endpoint.
Global configuration for the endpoint, affecting all connections
Maximum duration of inactivity to accept before timing out the connection.
Stream of incoming connections.
A stream of bidirectional QUIC streams initiated by a remote peer.
A stream of unidirectional QUIC streams initiated by a remote peer.
Components of a newly established connection
A future that will resolve into an opened outgoing bidirectional stream
A future that will resolve into an opened outgoing unidirectional stream
Future produced by RecvStream::read()
.
Future produced by RecvStream::read_chunk()
.
Future produced by RecvStream::read_chunks()
.
Future produced by RecvStream::read_exact()
.
Future produced by RecvStream::read_to_end()
.
A stream that can only be used to receive data
A stream that can only be used to send data
Parameters governing incoming connections
Identifier for a stream within a particular connection
An outgoing packet
Parameters governing the core QUIC state machine
An integer less than 2^62
Future produced by SendStream::write()
.
Future produced by SendStream::write_all()
.
Future produced by SendStream::write_all_chunks()
.
Future produced by SendStream::write_chunk()
.
Future produced by SendStream::write_chunks()
.
Future that completes when a connection is fully established
Enums
Errors in the configuration of an endpoint
Errors in the parameters being used to create a new connection
Reasons why a connection might be lost
Errors that arise from reading from a stream.
Errors that arise from reading from a stream.
Error from the ReadToEnd
future.
Errors that can arise when sending a datagram
Errors that arise while monitoring for a send stream stop from the peer
Errors that arise from writing to a stream